package com.zl.dynamicProxy;/**
 * @author suke
 * @create 2021-08-02 14:57
 */

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 关于对Drink这些被代理类的增强实现
 * @ClassName: DrinkInvocationHandler
 * @author: suke
 * @since: 2021/8/2 14:57
 */
public class DrinkInvocationHandler implements InvocationHandler{
    private Drink target; //被代理类对象, 目标对象

    public DrinkInvocationHandler(Drink target) {
        this.target = target;
    }


   //当你调用代理类对象的方法,  底层调用该方法
    //method 调用方法的对象   Object invoke(Object obj, Object... args)    执行这个方法  obj: 使用哪个对象调用这个方法, args: 传递参数
    //args:  调用方法的参数
    //proxy: 代理类对象

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //调用目标类的方法
       Object rs =  method.invoke(target,args);  //等同于: tea.drink()   tea.fun()   //执行目标方法
        //增强代码
        System.out.println("加糖....");  // 增强代码
        return rs;  // 返回的是执行目标对象方法的返回值    如果调用的方法返回值是void,  返回null
    }
}
